// 包声明 - main包是Go程序的入口包
package main

// 导入fmt包，用于格式化输入输出
import "fmt"

// 全局变量声明 - 使用var()块可以同时声明多个全局变量
// 全局变量特点：定义在函数外部，可以只定义不使用
var (
	s1 string = "1"  // 字符串类型变量s1，初始值为"1"
	s2 string = "2"  // 字符串类型变量s2，初始值为"2"
)

// main函数 - Go程序的入口函数
func main() {
    // 变量声明方式1：先声明变量类型，后赋值
    // var 变量名 类型
    var name string
    // 使用等号进行赋值
    name = "枫枫"
    fmt.Println(name) // 输出变量值

    // 变量声明方式2：声明变量类型并同时赋值
    var name1 string = "枫枫"
	fmt.Println(name1)
	
	// 变量声明方式3：省略变量类型（编译器会自动推断类型）
	var name2 = "枫枫"
	fmt.Println(name2)

    // 变量声明方式4：使用简短声明符号（:=）
    // 这种方式只能在函数内部使用
    name3 := "枫枫"
    fmt.Println(name3)

    // 同时声明并赋值多个变量
    var a1, a2 = 1, 2
    fmt.Println(a1, a2)


	// 常量定义 - 使用const关键字
	// 常量特点：定义时必须赋值，赋值后不能修改
	const constantName string = "枫枫" // 定义常量时必须赋值
	//constantName = "知道" // 这行代码会报错，因为常量不能修改
	fmt.Println(constantName)

	// 变量的可见性规则：
	// - 首字母大写的变量、函数、方法、属性可在包外访问
	// - 首字母小写的只能在当前包内访问
}